Omoikane Embedを他のプロジェクトに入れるには
わかりにくいところは気兼ねなく質問を書き込んでください(書き込み権限がない人はこちらへ: オモイカネに参加する) Github Actionsを使って1日1回ScrapboxからJSONをエクスポートし、OpenAIのEmbedding APIでベクトルインデックスを作る仕組みです
ベクトルインデックスはGithub ReleaseとQdrantの形で利用可能になります
実行レポートをScrapboxに書き込む機能がついています
この実行レポートの作成の部分でさらにChatGPT APIを使って1日の更新に対する要約や質問をします(Omoikane Bot) 現在、この機能の試行錯誤と発展が行われています
こちらの機能のみに興味がある場合、Github ActionsとQdrantの説明は読み飛ばしてもOKです
導入方法(最小限バージョン)
自力でトラブルシュートできる人向け解説です
forkするかcloneして新しいリポジトリにpushする
Githubのsecretsで必要な値を設定する
Github Actionsを実行して問題なければOK
導入方法(親切バージョン)
ローカル環境でステップバイステップで確認しながら作業を進める手順です
リポジトリ
forkするか、cloneして新しいリポジトリにpushする
同じリポジトリから複数のforkを作ることはできないので、複数プロジェクトに入れる予定なら後者がいいかも
以降は手元にcloneしてあると仮定して進める
DenoとPythonの環境構築
環境変数
ローカルで動かすための環境変数を設定します。
プロジェクトで秘密情報や設定を管理するために環境変数を使用します。Python, Denoなどの言語からこれらの変数に簡単にアクセスできるように、.envファイルに環境変数を保存します。
コマンド
$ cp sample.env .env
秘密情報を.envに置く理由: APIキー、認証情報などの秘密情報を、コード内に直接書かずに.envファイルに保存することで、秘密情報の誤公開リスクを減らします。
.envとsample.envの使い分け: sample.envは、必要な変数の名前と形式を示すためのテンプレートです。実際の値は.envに記述します。
.gitignoreに.envを追加する意味: .gitignoreに.envファイルを追加することで、このファイルをGitのバージョン管理から除外しています。これにより、誤って公開リポジトリに秘密情報をコミットするリスクを減らします。
注意
間違えてsample.envに書き込んでコミットしないように気をつけてください。
.envファイルは既に.gitignoreに追加されているはずです。環境変数を追加または変更する際は、.envファイルを編集してください。
ステップ1: Scrapboxからの自動エクスポート
必要なこと
Denoの環境構築
環境変数
SID: Scrapboxのconnect.sid
PROJECT_NAME: プロジェクト名
検証
正しく設定できていれば
$ export_from_scrapbox/start.sh
で<PROJECT_NAME>.jsonができる
ステップ2: OpenAI Embedding APIを使った埋め込み
必要なこと
Pythonの環境構築
環境変数
OPENAI_API_KEY: OpenAIのAPIキー
検証
<PROJECT_NAME>.jsonが大きい人と、OpenAIのアカウントを作ったばっかりでレートリミットが掛かってる人は、実際のJSONを使うとテストに時間が掛かるので小さいテストを用意してある
小さいテスト
$ python make_vecs_from_json/test.py
正しく設定できていれ<PROJECT_NAME>.pickleができる
テストの過程で小さいテストデータが上書きされるのでバックアップが必要
Gitに入れることになる
ファイルサイズが大きい場合はGit LFSを使う
テストではなく本番をローカル実行したい時は
$ python make_vecs_from_json/main.py
ステップ3: Qdrantへのアップロード
ベクトル検索を提供するクラウドサービスQdrantに<PROJECT_NAME>.pickleの内容をアップロードする
必要なこと
Pythonの環境構築
環境変数
QDRANT_API_KEY
QDRANT_URL
COLLECTION_NAME
(optional)Qdrantに入れる際のコレクション名、指定しない場合はPROJECT_NAMEが使われる
URL
https://scrapbox.io/files/64d0bb175a23fb001b95e075.png
API KEY
https://scrapbox.io/files/64d0ca0696378c001babba91.png
初回はコレクションを作成する必要がある
$ python upload_vecs/recreate_collection.py
実際にpickleをアップロードするのはこちら
$ python upload_vecs/main.py
検証
コレクションの作成が成功していれば設定に問題はない
$ python upload_vecs/recreate_collection.py
$ python upload_vecs/main.py
検証のためだけに手間が多いので検証せずに進んでもいいと思うnishio.icon
ステップ4: Scrapboxへのレポート書き込み
必要なこと
Pythonの環境構築
<PROJECT_NAME>.json
環境変数
SID: Scrapboxのconnect.sid
PROJECT_NAME: プロジェクト名
OPENAI_API_KEY: OpenAIのAPIキー
検証
$ python write_to_scrapbox/main.py
エラーなく実行されてScrapboxにページができていればOK
このボット書き込みのロジックは盛んに試行錯誤されているところnishio.icon
omoikane-embed-coreのものはシンプルな直近の書き込みの要約
試行錯誤の過程であるのでわかりやすい解説はない
一休み
これでローカル環境での検証が終わった
次はGithub Actionsでの実行を目指す
Githubのsecretsを設定
.envに書いた内容をGithubで設定する: memo 検証
https://scrapbox.io/files/64d3593a41e352001b1abb3d.png
ActionsのEmbed(Mock Test)をRun workflowする
問題なく動けばOK
過去のpickleを再利用する人はこのテストで作成されたリリースを削除する必要がある
さもないとテストリリースを再利用してしまうので
問題なく動けばEmbedをを手動でRun workflowするか、スケジュール実行されるのを待てば良い
雑談コーナー
なんでもどうぞ
inajob.icon
Scrapboxではない自分のWikiのデータをこれでQdrantに入れるところまでできた
make_vecs_from_jsonに少し手を加えて、自分のWikiからデータを取得するようにした
うん、バッチ処理でまとめてAPIを叩く実装にしたので速くなってるはずnishio.icon
さて、何を考えてもらおうかな・・
とりあえずqdrantのAPIを使って自分のwikiで関連文書を表示できるようにした
過去のTwitterの発言も入れてみた
collectionをまたいで検索できるので、「このWikiのページと関連のあるTweet」 みたいなのを取得できるようになった
いいねnishio.icon
今更だけど、プライバシー的なリスク(private projectを扱う時)について何も理解してないので少し説明をみたいかもはるひ.icon
「API経由ならデータをモデルの学習に利用しない」といわれている?
yesnishio.icon
We do not use Content that you provide to or receive from our API (“API Content”) to develop or improve our Services.
みんなのチャレンジ